package main

import "fmt"

type Student struct {
	Name string
	Age  byte
}

type Pupil struct {
	Name    string
	Student // 匿名结构体实现继承
}

func (stu *Student) GetInfo() {
	fmt.Println("stu info is ", *stu)
}

func (p *Pupil) GetInfo() {
	fmt.Println("Pupil info is ", *p)
}

func main() {
	p := &Pupil{}
	p.Student.Name = "jack"
	p.Student.Age = 12
	p.GetInfo() // Pupil info is  {{jack 12}} 重写方法
	// stu info is  {jack 12} 不重写方法

	p.Name = "marry"
	/*
		1. 判断Pupil结构体 自定义字段是否包含 Name
		2. 包含 即访问Name， 否则到匿名结构体中查找
	*/
	p.Age = 18

	p.GetInfo()                 // Pupil info is  {marry {jack 18}}
	fmt.Println(p.Name)         // marry
	fmt.Println(p.Age)          // 18
	fmt.Println(p.Student.Name) // jack

}
